package com.gzz.retail.application;
/**
 *
 * 对应六边形架构的输入适配器
 * <p>
 * 应用层 同时也对应了Clean Architecture 中的Application Business Rule。
 * <p>
 * 客户端代码存放的地方，负责组装调用领域模型，仓库，控制事务，对应六边形架构的应用服务层
 * <p>
 * 从项目实践中，它作为{{粗粒度}}业务的入口。（也称这为一个Use Case）。
 * 这一层中不应该包含复杂的业务规则。
 * 而是对Domain层进行协调。
 * <p>
 * dto 存放对上层暴露服务所接受的参数类型。
 * service {{粗粒度}} 的服务接口
 * util
 * <p>
 * 相对于领域层，应用层是很薄的一层，应用层定义了软件要完成任务，要尽量简单，
 * 它不包含任务业务规则或知识，为下一层领域对象协助任务、委托工作。
 * 它没有反映业务情况的状态，但它可以具有反映用户或程序的某个任务的进展状态。
 * <p>
 * 对外 为展现层提供各种应用功能（service）
 * 对内 调用领域层（领域对象或领域服务）完成各种业务逻辑任务（task）。
 * 这一层也很适合写一些任务处理，日志监控。
 * <p>
 * 用来封装业务逻辑
 * 面向用例。
 * 粗粒度。
 * 外部视图看系统。
 * 一个请求对应一个方法。
 * 服务之间不相互调用。
 * 职责一般包括：跨模块协调、DTO转换、事务AOP、权限AOP、日志AOP、异常AOP、邮件、消息队列。
 *
 *
 *
 * 应用服务是用来表达用例和用户故事（User Story)的主要手段。
 *
 * 应用层通过应用服务接口来暴露系统的全部功能。在应用服务的实现中，它负责编排和转发，它将要实现的功能委托给一个或多个领域对象来实现，
 * 它本身只负责处理业务用例的执行顺序以及结果的拼装。通过这样一种方式，它隐藏了领域层的复杂性及其内部实现机制。
 *
 * 应用层相对来说是较“薄”的一层，除了定义应用服务之外，在该层我们可以进行安全认证，权限校验，持久化事务控制，或者向其他系统发生基于事件的消息通知，另外还可以用于创建邮件以发送给客户等。
 *
 * 应用层作为展现层与领域层的桥梁。展现层使用VO（视图模型）进行界面展示，与应用层通过DTO（数据传输对象）进行数据交互，从而达到展现层与DO（领域对象）解耦的目的。
 *
 * 作者：圣杰
 * 链接：https://www.jianshu.com/p/435939737f5d
 * 来源：简书
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */